<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="../react18/react.development.js"></script>
  <script src="../react18/react-dom.development.js"></script>
  <script src="../react18/babel.min.js"></script>
</head>

<body>
  <div id="app"></div>
  <script type="text/babel">

    /* 
      通过ref回调函数方式收集表单数据
      回调形式的refs
        ref 属性,你会传递一个函数,这个函数在渲染的时候就会执行,这个函数中接收 HTML DOM 元素作为参数,以使它们能在其他地方被存储和访问
    */

    class App extends React.Component{
      render(){
        // c 参数代表的就是当前元素  所以this.nameEle代表的也是当前元素
        return (
          <div>
            姓名:<input type="text" ref={c=>this.nameEle=c}/>
            <br/>
            年龄:<input type="text" ref={c=>this.ageEle=c}/>
            <br/>
            爱好:<input type="text" ref={c=>this.hobbyEle=c}/>
            <br/>
            <button onClick={this.handle}>提交</button>
            </div>
        )
      }

      // const name=this.nameEle.value;//不能写在外面  要在里面获取值,写在外面表单还没有输入的时候就已经执行了,永远都是空字符串
      handle=()=>{
        // 不能解构?  结构时需要属性名相同才能结构,这里三个属性都是value  不好解构
        const name=this.nameEle.value;
        const age=this.ageEle.value;
        const hobby=this.hobbyEle.value;

        console.log(name,age,hobby)
      }

    }
    
    const root = ReactDOM.createRoot(document.getElementById('app'));
    root.render(<App/>)




  </script>
</body>

</html>